静态内部类

要理解静态内部类,先理解两个概念,静态和内部类。如果一个类的属性被static修饰为静态,那么在类加载完成后就已经被初始化,即已经可以通过类名.属性名来调用了,不需要先去实例化这个类。这是因为之前提到的类加载过程,加载——>验证——>准备——>解析——>初始化。准备阶段给静态变量分配内存空间和初始值(null,0之类),初始化阶段即对这些变量做初始化操作。一个类在生命周期类只会被加载一次,也就是说被static修饰的属性只会被初始化一次,这可用于线程安全。而内部类的概念算是编码的一种优化,如果在类中定义了一个内部类,即这个内部类只会被这个外围类调用,这样就不需要专门去写一个.java文件去定义这个类的。理解了这两个概念后,静态内部类就不难理解了。

静态内部类在其外围类加载完成后就已经被初始化好,这就需要其不能依赖于外围类的非静态的成员变量。这也是其和成员内部类最明显的区别。

假设school是外围类,student是静态内部类,由于静态内部类是外围类加载完成后就被初始化好了,所以不必先去实例化外围类,可以直接school.student student = new school.student()去实例化。对比之下如果student是成员内部类,就需要先去实例化school,再实例化student,即school.student student = new school().new student()。

这里涉及到内部类的访问规则,其实访问内部类和访问类的属性一样,通过类名.内部类名来访问。而静态内部类有更严格的访问规则,都是由于static特性。

1.静态内部类中只能访问外围类的静态成员变量

2.外围类的非静态方法不能访问静态内部类中的属性

3.外围类访问静态内部类中属性要通过静态内部类名.属性的方法。

这里有一个容易混淆的地方,静态内部类中是可以定义静态成员变量和非静态成员变量的,这些非静态成员变量是在静态内部类被实例化的时候去初始化,和外部类有层嵌套的概念。                                                                                                                                                                                                                           

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值